gusucode.com > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM源码程序 > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM\stprtool\linear\finite\kozinec.m

    function [alpha,theta,solution,t]=kozinec(X,J,tmax,t,alpha,theta)
% KOZINEC Kozinec's algorithm searching for decision hyperplane. 
%  [alpha,theta,t]=kozinec(X,J,tmax,t,alpha,theta)
%
% KOZINEC is implementation of Kozinec's learning rule (similar to
%  Perceptron). This algorithm finds vector alpha and threshold theta
%  which hold
%          alpha' * x >= theta    for x=X(:,i), J(i)=1 (1st class)
%          alpha' * x < theta     for x=X(:,i), J(i)=2 (2nd class)
%
%  Found alpha and theta determine decision hyperplane in the
%  N-dimensional feature space.
%
%  Kozinec's algorithm works iteratively and if input classes
%  are linearly separable then it stops in finite number of steps.
%  This implementation allows to limit maximal number of steps and
%  allows to start algorithm from defined state which is determined
%  by alpha and theta.
%
%  Input
%   X [DxM] contains M training points in D-dimensional the feature 
%      space. X=[x1,x2,..XM] where xi is i-th column vectors.
%   J [1xM] contains class labels of the points in X. A class label 
%      has  to be 1 for the first class and 2 for the second class.
%   tmax [1x1] 1. if is integer tmax > 0 then it determines a maximal 
%      number of algorithm steps, i.e. if the solution is not found 
%      until tmax-th step the algorithm will exit and set solution = 0.
%      2. if tmax==-1, then the algorithm only returns, in the variable
%      alpha, badly classified point which would have been used in
%      the adaptation step but the adaptation is not performed.
%   t [1x1], alpha [Dx1], theta [1x1] if this arguments enter function
%      the algorithm starts from a state which they determine.
%
%  Output
%   alpha [Dx1] found normal vector of the hyperplane or, if tmax==-1,
%      badly classified point.
%   theta [1x1] found threshold of the hyperplane.
%   solution [1x1], 1 ... solution is found,
%                   0 ... solution is not found.
%   t [1x1] is number of steps the algorithm performed.
%
%
% See also EKOZINEC, PERCEPTR, LINSVM.
%

% Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac
% (c) Czech Technical University Prague, http://cmp.felk.cvut.cz
% Written Vojtech Franc (diploma thesis) 02.01.2000
% Modifications
% 24. 6.00 V. Hlavac, comments polished.
% 15-dec-2000, text, returns bad point

% Process input arguments
if nargin < 4,
   t=0;
   alpha=0;
   theta=0;
end
if nargin < 3
   tmax=inf;
end

% Transform original feature space into the homogenous (theta=0)
% coordinates.
[alpha,X]=ctransf(alpha,theta,X,J);

N=size(X,1);        % dimension
K=size(X,2);        % number of training points


% Perform the step t=0.
% alpha = any vector from X, for example the first.
if t==0,
   alpha=X(:,1);
   t=1;
   tmax=tmax-1;
end

% It returns only the first badly classified point which 
% would have been used for updating solution.
% ----------------------------------------------------
if tmax == -1,
  for i=1:K,
     % get one x from set X
     x=X(:,i);

     % check x
     if alpha'*x <=0,
        if J(i)==1,
          alpha = x(1:(end-1));
        else
          alpha = -x(1:(end-1));
        end
        
        solution = 0;
        return;
      end 
   end % for i=1:K,
   
   solution=1;
   return;
else
  
% Iterate until solution is not found or
% number of steps exceeds given limit tmax.
% -------------------------------------------------
   solution = 0;
   while solution == 0 & tmax > 0,
      tmax = tmax-1;
 
      % It's apriory supposed that the solution is found.
      solution =1;

      % Search for any  x from X that alpha*x <= 0
      for i=1:K,
        % get one x from set X
        x=X(:,i);

        % check x
        if alpha'*x <=0,

           % adjust alpha

           % Find k, so that k = min(1,argmin| alpha*(1-k)+k*x |)
           k=min(1,abs((x-alpha)'*alpha/((x-alpha)'*(x-alpha))));

           % then alpha is equal to...
           alpha=(1-k)*alpha+k*x;

           % increase time
           t=t+1;
           solution = 0;
           break;
        end % if

      end % for
   end % while
end % if, else

% Transform the found solution from the homogenous coordinates
% into original space.
[alpha,theta]=ictransf(alpha);